<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head><meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"/>
<title>全文检索插件</title><link href="../zdoc.css" rel="stylesheet" type="text/css"/>
</head>
<body><a name="top"></a>
<div class="zdoc_header">全文检索插件</div>
<div class="zdoc_author"><em>By:</em><b>Jaron</b></div>
<div class="zdoc_body">
<ul class="zdoc_index_table">
<li>
<div><span class="num">1</span><a href="#安装全文插件">安装全文插件</a></div>
</li>
<li>
<div><span class="num">2</span><a href="#配置索引目录（可选）">配置索引目录（可选）</a></div>
</li>
<li>
<div><span class="num">3</span><a href="#添加数据到Lucence">添加数据到Lucence</a></div>
</li>
<li>
<div><span class="num">4</span><a href="#分页检索对象">分页检索对象</a></div>
</li>
</ul>
<div class="hr"><b></b></div>
<h1><a name="安装全文插件"></a>安装全文插件</h1>
<div style="float:right;"><a href="#top">Top</a></div>
<ol type="1">
<li>在工程的pom中加入</li>
</ol>
<pre>&lt;dependency&gt;
	&lt;groupId&gt;org.jaronsource.framework&lt;/groupId&gt;
	&lt;artifactId&gt;plugin-search&lt;/artifactId&gt;
	&lt;version&gt;${framework-version}&lt;/version&gt;
&lt;/dependency&gt;
</pre>
<h1><a name="配置索引目录（可选）"></a>配置索引目录（可选）</h1>
<div style="float:right;"><a href="#top">Top</a></div>
<p>在工程的config.properties里添加</p>
<pre>plugin.search.searchIndexDir=/path/to/index
</pre>
<p>如果没有设置plugin.search.searchIndexDir，索引目录默认为java.io.tmpdir代表的目录</p>
<h1><a name="添加数据到Lucence"></a>添加数据到Lucence</h1>
<div style="float:right;"><a href="#top">Top</a></div>
<ol type="1">
<li>在domain类上加上@SearchableBean
<pre>
@Entity
@Table(name="contact")
@SearchableBean
public class Contact implements IEntity&lt;Integer&gt; {

	...
	
}
</pre>
</li>
<li>在domain类字段上加上@SearchableField
<pre>
...

/** 姓名 */
@Column(name="NAME")
@NotBlank(message="{field.contact.name}")
@SearchableField(index=Index.ANALYZED)
private String name;

...

/** 电话 */
@Column(name="PHONE")
@SearchableField(index=Index.ANALYZED)
private String phone;

...
</pre>
<p>@SearchableField的属性</p>
<table border="1" cellspacing="2" cellpadding="4">
<tr>
<td> 属性					</td>
<td> 说明																		</td>
</tr>
<tr>
<td> value				</td>
<td> 存储到Lucence时该字段使用的名称，如不设置，则使用原字段名				</td>
</tr>
<tr>
<td> index				</td>
<td> 代表是否可被检索，及添加到索引时是否使用分词索引，默认为分词索引			</td>
</tr>
<tr>
<td> store				</td>
<td> 代表是否可被存储，默认是可存储											</td>
</tr>
</table>
</li>
<li>使用Service的save方法保存domain
<pre>Contact contact = new Contact();
contact.setName("测试一");
contact.setPhone("15500000001");

contactService.save(contact);
</pre>
<p>插件里使用Spring AOP机制对所有IService的子类的save方法拦截，自动将domain保存到Lucence</p>
</li>
</ol>
<h1><a name="分页检索对象"></a>分页检索对象</h1>
<div style="float:right;"><a href="#top">Top</a></div>
<pre>PageRequest pageRequest = new PageRequest(1, 10);

<span class="zdoc_code_cmt">// 查询条件，需在bean上设置过@SearchableField，且index不能是Index.NO
</span>Map&lt;String, String&gt; paramMap = new HashMap&lt;String, String&gt;();
paramMap.put("name", "测");

Page&lt;Contact&gt; contactPage = SearchUtils.findPage(pageRequest, Contact.class, paramMap);
</pre>
</div>
<div class="zdoc_footer"><em>By:</em><b>Jaron</b></div>
</body>
</html>